/**
 * @file Terrain.h
 * @brief Fichier d'entête du module Terrain.
 * @author FIAKAIFONU Fleur MEJIA Daniel
 */

#ifndef _TERRAIN_H
#define _TERRAIN_H


/* 	Structure Terrain qui contient :
	dimx : un entier qui indique la longueur du terrain
	dimy : un entier qui indique la largeur du terrain
	**tab : un tableau 1D de pointeurs sur charactere  */

/**
 * @struct Terrain
 * @brief Structure d'un terrain.
 *
 */

typedef struct{
				int dimx;
				int dimy;
				char **tab;
}Terrain;

/* 	procedure d'initialisation d'un terrain en allouant un tableau de pointeurs sur charactere dans le tas
	precondition : ter non initialise
	postcondition : ter initialise  */

/**
 * @fn void initialiser_Terrain ( Terrain *ter ) ;
 * @brief Initialise un terrain.
 *
 * @param [in, out] ter Pointeur sur Terrain .
 */

void initialiser_Terrain(Terrain *ter);

/*	procedure de liberation d'un terrain en liberant le tableau de pointeurs sur charactere dans le tas
	precondition : ter prealablement initialise
	postcondition : ter est libere, il peut etre reinitialise si besoin  */

/**
 * @fn void liberer_Terrain ( Terrain *ter ) ;
 * @brief Libere un terrain.
 *
 * @param [in, out] ter Pointeur sur Terrain .
 */

void liberer_Terrain(Terrain *ter);

/*	fonction qui renvoie un entier : 1 si on peut y placer une tour 0 sinon
	precondition : ter prealablement initialise  */

/**
 * @fn int terPositionTourValide(const Terrain *ter, const int x, const int y);
 * @brief verifie si les coordonnees donnees x et y sont valides pour y placer une tour.
 *
 * @param [in,out] ter pointeur sur Terrain.
 * @param [in] x coordonnee x de la position a verifier.
 * @param [in] y coordonnee y de la position a verifier.
 * @return Un entier.
 */

int terPositionTourValide(const Terrain *ter, const int x, const int y);

/*	precondition : ter prealablement initialise  */

/**
 * @fn const int getDimy(const Terrain *ter);
 * @brief fonction qui renvoie la valeur de la dimension y du terrain.
 *
 * @param [in,out] ter pointeur sur Terrain.
 * @return Un entier.
 */


const int getDimy(const Terrain *ter);

/*	precondition : ter prealablement initialise  */

/**
 * @fn const int getDimx(const Terrain *ter);
 * @brief fonction qui renvoie la valeur de la dimension x du terrain.
 *
 * @param [in,out] ter pointeur sur Terrain.
 * @return Un entier.
 */


const int getDimx(const Terrain *ter);

/*	precondition : ter prealablement initialise  */

/**
 * @fn const char terGetXY(const Terrain *ter, const int x, const int y);
 * @brief fonction qui renvoie le charactere correspondant aux coordonnees donnees x et y sur le terrain.
 *
 * @param [in,out] ter pointeur sur Terrain.
 * @param [in] x coordonnee x sur le terrain.
 * @param [in] y coordonnee y sur le terrain.
 * @return Un charactere.
 */

const char terGetXY(const Terrain *ter, const int x, const int y);

/**
 * @brief fonction qui remplace le charactere correspondant aux coordonnees donnees x et y sur le terrain par le charactère c.
 *
 * @param [in,out] ter pointeur sur Terrain.
 * @param [in] x coordonnee x sur le terrain.
 * @param [in] y coordonnee y sur le terrain.
 * @param c charactère à inserer
 * @return Un charactere.
 */

void terSetXY(Terrain *ter, const int x, const int y, char c);


#endif
